'use strict';

const { dirname } = require('path');
const fs = require('fs');
const { getProjectPath } = require('./utils/projectHelper');

function replacePath(path) {
    if (path.node.source && /\/lib\//.test(path.node.source.value)) {
        const esModule = path.node.source.value.replace('/lib/', '/es/');
        const esPath = dirname(getProjectPath('node_modules', esModule));
        if (fs.existsSync(esPath)) {
            path.node.source.value = esModule;
        }
    }

    // @ant-design/icons-vue/xxx => @ant-design/icons-vue/es/icons/xxx
    const antdIconMatcher = /@ant-design\/icons-vue\/([^/]*)$/;
    if (path.node.source && antdIconMatcher.test(path.node.source.value)) {
        const esModule = path.node.source.value.replace(
            antdIconMatcher,
            (_, iconName) => `@ant-design/icons-vue/es/icons/${iconName}`,
        );
        const esPath = dirname(getProjectPath('node_modules', esModule));
        if (fs.existsSync(esPath)) {
            path.node.source.value = esModule;
        }
    }
}

function replaceLib() {
    return {
        visitor: {
            ImportDeclaration: replacePath,
            ExportNamedDeclaration: replacePath,
        },
    };
}

module.exports = replaceLib;
